#include <reg51.h>

unsigned char num=0; //计数

//函数功能：主函数
void main( )
{
	TMOD = 0x01; //定时/计数器工作方式：16位
	//先实现定时50ms，需计数50000次，50000次*1us=50ms
	TH0 = (65536-50000)/256; //计算初始值的高8位
	TL0 = (65536-50000)%256; //计算初始值的低8位
	ET0 = 1; //定时/计数器0中断允许位
	EA = 1;  //CPU中断允许总控制位
	TR0 = 1; //启动定时/计数器0
	P1 = 0xfe; //P1端口赋初值，首先点亮LED1，1111 1110
	while(1)
	{
		if(num == 20) //50ms*20次=1s
		{
			num = 0;
			P1 = P1 << 1 | 0x01; //循环左移，依次点亮LED灯
			if(P1 == 0xff) //当点亮第8个灯时，恢复初始状态
				P1 = 0xfe;			
		}
	}
}

//函数功能：中断函数
void timer0_int( ) interrupt 1 using 1
{
	num++;
	TH0 = (65536-50000)/256;
	TL0 = (65536-50000)%256;
}